﻿Ext.define('Articulos', {
    extend: 'ABMBase',
    Title: 'Formulario ABM Articulos',
    Model: 'Model.Articulos',
    defaultPropertySort: 'descripcion',
    storeArticuloClasificacion: CreateForeignStore('storeArticuloClasificacion', 'Model.ArticuloClasificacion'),
    storeClasificacion: CreateForeignStore('storeClasificacion', 'Model.ClasifArticulos'),
    storeCategArt: CreateForeignStore('storeCategArt', 'Model.CategArticulos'),
    storeRubro: CreateForeignStore('storeRubro', 'Model.Rubro'),
    storeEntidad: CreateForeignStore('storeEntidad', 'Model.Entidad'),
    listeners: {
        Creando: function (rcd) {
            rcd.record.set('id_articulo', activeInstance.GetNum('ART'));
            var x = activeInstance.EjecutarEnServidor('ObtenerEntidadOperador');
            rcd.record.set('id_entidad', x);
            Ext.StoreMgr.get('storeArticuloClasificacion').reload({
                params: { filter: '[{ "type": "numeric", "comparison": "eq", "value": -1, "field": "id_articulo"}]' }
            });
        },
        Editando: function (rcd) {
            Ext.StoreMgr.get('storeArticuloClasificacion').reload({
                params: { filter: '[{ "type": "numeric", "comparison": "eq", "value": ' + rcd.record.get('id_articulo') + ', "field": "id_articulo"}]' }
            });
        },
        Actualizado: function (rcd) {
            var datosAssociacion = '';
            Ext.StoreMgr.get('storeArticuloClasificacion').each(function (r) {
                datosAssociacion += r.get('id_clasificacion') + '~' + r.get('valor') + '£';
            });
            datosAssociacion = datosAssociacion.substring(0, datosAssociacion.length - 1);
            var url = Ext.StoreMgr.get('storeArticuloClasificacion').getProxy().getModel().proxy.api.read;
            url = url.substring(0, url.indexOf('?'));
            var response = Ext.Ajax.request({
                async: false,
                url: url,
                params: {
                    action: 'ActualizarArticuloClasificacion',
                    id_articulo: rcd.record.get('id_articulo'),
                    Association: datosAssociacion
                }
            });
        }
    },
    WindowPanel: [{
        xtype: 'fieldset',
        title: 'General',
        collapsible: true,
        items: [{
            xtype: 'textfield',
            fieldLabel: 'Identificador',
            name: 'id_articulo',
            maxLength: 10,
            enforceMaxLength: true,
            allowBlank: false
        }, {
            xtype: 'textfield',
            fieldLabel: 'Código',
            name: 'codigo',
            maxLength: 10,
            enforceMaxLength: true,
            allowBlank: false
        }, {
            xtype: 'textfield',
            fieldLabel: 'Descripción',
            name: 'descripcion',
            maxLength: 50,
            enforceMaxLength: true,
            allowBlank: false
        }, {
            xtype: 'combobox',
            fieldLabel: 'Entidad Proveedor',
            queryMode: 'local',
            displayField: 'nombre',
            valueField: 'id_entidad',
            editable: true,
            forceSelection: true,
            store: Ext.StoreMgr.get('storeEntidad'),
            readOnly: true,
            allowBlank: false,
            name: 'id_entidad'
        }]
    }, {
        xtype: 'fieldset',
        title: 'Detalle',
        collapsible: true,
        items: [{
            xtype: 'container',
            frame: true,
            layout: 'column',
            items: [{
                xtype: 'fieldset',
                columnWidth: 0.5,
                border: false,
                items: [{
                    xtype: 'textfield',
                    fieldLabel: 'Marca',
                    name: 'marca',
                    maxLength: 50,
                    enforceMaxLength: true,
                    allowBlank: false
                }, {
                    xtype: 'combobox',
                    fieldLabel: 'Rubro',
                    queryMode: 'local',
                    displayField: 'descripcion',
                    valueField: 'id_rubro',
                    editable: true,
                    forceSelection: true,
                    store: Ext.StoreMgr.get('storeRubro'),
                    allowBlank: false,
                    name: 'id_rubro'
                }, {
                    xtype: 'combobox',
                    fieldLabel: 'Categoría de Artículo',
                    queryMode: 'local',
                    displayField: 'descripcion',
                    valueField: 'id_categ_art',
                    editable: true,
                    forceSelection: true,
                    store: Ext.StoreMgr.get('storeCategArt'),
                    allowBlank: false,
                    name: 'id_categ_art'
                }, {
                    id: 'grdArtCla',
                    xtype: 'grid',
                    title: 'Clasificación de Artículo',
                    height: 150,
                    store: Ext.StoreMgr.get('storeArticuloClasificacion'),
                    plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
                        clicksToEdit: 1
                    })],
                    tbar: [{
                        xtype: 'combobox',
                        queryMode: 'local',
                        displayField: 'descripcion',
                        valueField: 'id_clasificacion',
                        editable: true,
                        forceSelection: true,
                        store: Ext.StoreMgr.get('storeClasificacion'),
                        name: 'id_clasificacion',
                        listeners: {
                            select: function (cbo, rcd, eOpt) {
                                if (Ext.isEmpty(Ext.StoreMgr.get('storeArticuloClasificacion').getById(rcd[0].get('id_clasificacion')))) {
                                    var model = Ext.ModelManager.getModel('Model.ArticuloClasificacion');
                                    var record = new model();
                                    record.set('id_clasificacion', rcd[0].get('id_clasificacion'));
                                    record.set('name', record.fields.get('name').convert(null, rcd[0]));
                                    Ext.StoreMgr.get('storeArticuloClasificacion').add(record);
                                }
                            }
                        }
                    }],
                    listeners: {
                        edit: function () {
                            if (Ext.getCmp('mainGrid').getSelectionModel().getSelection().length > 0)
                                Ext.getCmp('mainGrid').getSelectionModel().getSelection()[0].setDirty();
                        }
                    },
                    columns: [
                            { header: 'Clasificación', dataIndex: 'name' },
                            { header: 'Valor', dataIndex: 'valor', flex: 1, editor: { allowBlank: false} }
                        ]
                }]
            }, {
                xtype: 'fieldset',
                columnWidth: 0.5,
                frame: true,
                border: false,
                items: [{
                    xtype: 'textfield',
                    fieldLabel: 'Unidad de Venta',
                    name: 'unid_venta',
                    maxLength: 10,
                    enforceMaxLength: true,
                    allowBlank: false
                }, {
                    xtype: 'textfield',
                    fieldLabel: 'Unidad de Empaque',
                    name: 'unid_empaque',
                    maxLength: 10,
                    enforceMaxLength: true,
                    allowBlank: false
                }, {
                    xtype: 'textfield',
                    fieldLabel: 'Medida de Empaque',
                    name: 'medida_empaque',
                    maxLength: 10,
                    enforceMaxLength: true,
                    allowBlank: false
                }, {
                    xtype: 'numberfield',
                    fieldLabel: 'Precio',
                    name: 'precio',
                    maxLength: 10,
                    enforceMaxLength: true,
                    allowBlank: false,
                    minValue: 0
                }, {
                    xtype: 'numberfield',
                    fieldLabel: 'Porcentaje IVA',
                    name: 'iva1',
                    maxLength: 10,
                    enforceMaxLength: true,
                    allowBlank: false,
                    minValue: 0,
                    maxValue: 100
                }, {
                    xtype: 'numberfield',
                    fieldLabel: 'Porcentaje IVA adicional',
                    name: 'iva2',
                    maxLength: 10,
                    enforceMaxLength: true,
                    allowBlank: false,
                    minValue: 0,
                    maxValue: 100
                }]
            }]
        }]
    }, {
        xtype: 'fieldset',
        title: 'Observaciones',
        collapsible: true,
        layout: 'fit',
        items: [{
            xtype: 'textarea',
            hideLabel: true,
            name: 'observaciones'
        }]
    }],
    Columns: [
        { header: 'Identificador', dataIndex: 'id_articulo', filter: true },
        { header: 'Código', dataIndex: 'codigo', filter: true },
        { header: 'Descripción', dataIndex: 'descripcion', filter: true },
        {
            header: 'Entidad',
            dataIndex: 'id_entidad',
            filter: CreateListFilter('nombre', 'id_entidad', 'storeEntidad'),
            renderer: ForeignStoreRenderer('storeEntidad', 'nombre')
        },
        { header: 'Marca', dataIndex: 'marca', filter: true },
        {
            header: 'Rubro',
            dataIndex: 'id_rubro',
            filter: CreateListFilter('descripcion', 'id_rubro', 'storeRubro'),
            renderer: ForeignStoreRenderer('storeRubro', 'descripcion')
        },
        {
            header: 'Categoria Articulo',
            dataIndex: 'id_categ_art',
            filter: CreateListFilter('descripcion', 'id_categ_art', 'storeCategArt'),
            renderer: ForeignStoreRenderer('storeCategArt', 'descripcion')
        },
        { header: 'Unidad Venta', dataIndex: 'unid_venta', filter: true },
        { header: 'Unidad Empaque', dataIndex: 'unid_empaque', filter: true },
        { header: 'Medida Empaque', dataIndex: 'medida_empaque', filter: true },
        { header: 'Precio', dataIndex: 'precio', filter: true },
        { header: 'IVA', dataIndex: 'iva1', filter: true },
        { header: 'IVA 2', dataIndex: 'iva2', filter: true },
        { header: 'Observaciones', dataIndex: 'observaciones', filter: true }
        ]
});
